package com.hsgene.user.service;

import com.hsgene.common.util.result.ApiResult;
import com.hsgene.common.util.result.NullObject;
import com.hsgene.common.util.support.LimitHelper;
import com.hsgene.common.util.support.OrderHelper;
import com.hsgene.common.util.support.Pagination;
import com.hsgene.user.condition.OperationAccountCondition;
import com.hsgene.user.domain.GeneticTestingOperationAccount;

/**
 * 后台管理用户Service
 *
 * @author wangbing
 * @version 1.0, 2018/11/2
 */
public interface OperationAccountService {

    /**
     * 添加后台管理用户
     *
     * @param operationAccount 用户信息
     * @return 操作结果
     */
    ApiResult<NullObject> addOperationAccount(GeneticTestingOperationAccount operationAccount);

    /**
     * 修改用户密码
     *
     * @param id               用户id
     * @param newPwd           密码（明文）
     * @param isFirstLoginInit 是否第一次登录修改密码
     * @return
     */
    ApiResult<NullObject> updateOperationAccountPwd(String id, String newPwd, boolean isFirstLoginInit);

    /**
     * 查询用户列表
     *
     * @param condition   查询条件
     * @param orderHelper 排序参数
     * @param limitHelper 分页参数
     * @return 用户列表
     */
    ApiResult<Pagination<GeneticTestingOperationAccount>> queryOperationAccounts(
            OperationAccountCondition condition, OrderHelper orderHelper, LimitHelper limitHelper);

    /**
     * 查询指定用户信息
     *
     * @param accountId 用户id
     * @return 用户信息
     */
    ApiResult<GeneticTestingOperationAccount> findOperationAccount(String accountId);

    /**
     * 更新后台管理用户
     *
     * @param operationAccount 用户信息
     * @return 操作结果
     */
    ApiResult<NullObject> updateOperationAccount(GeneticTestingOperationAccount operationAccount);

    /**
     * 删除后台管理用户
     *
     * @param accountId 用户id
     * @return 操作结果
     */
    ApiResult<NullObject> deleteOperationAccount(String accountId);

    /**
     * 用户去重验证
     *
     * @param type          验证字段类型：1-姓名，2-电话号码
     * @param field         验证值
     * @param excludeUserId 排除校验的用户id，用于更新时排除自身
     * @return 验证结果
     */
    ApiResult<NullObject> validateDuplicationAccount(Integer type, String field, String excludeUserId);
    /**
     *添加机构用户
     * @author FX
     * @date 2019/1/4 16:35
     * @param account
     * @return
     */
    ApiResult<NullObject> addAgencyAccount(GeneticTestingOperationAccount account);
    /**
     *修改机构账户
     * @author FX
     * @date 2019/1/4 17:40
     * @param account
     * @return
     */
    ApiResult<NullObject> updateAgencyAccount(GeneticTestingOperationAccount account);
}
